#ifndef ARRAYS_H_c08cf25c_f79d_4c96_ad49_0a9282c3fcf6
#define ARRAYS_H_c08cf25c_f79d_4c96_ad49_0a9282c3fcf6

#include "../../external/external.h"
#include <vector>

template<class TBase, class TItem>
class BaseArray : public TBase
{
public:
    BaseArray() {}
    ~BaseArray() {}

    int size() const
    {
        return _data.size();
    }

    const TItem *item(int index) const
    {
        if (index < 0)
            return _data[0];
        if (index > size())
            return _data.back();
        return _data[index];
    }

    void add(const TItem *item)
    {
        _data.push_back(item);
    }

private:
    std::vector<const TItem *> _data;
};

typedef BaseArray<ISpellsArray, ISpell> SpellsArray;
typedef BaseArray<IUnitsArray, IUnit> UnitsArray;
typedef BaseArray<IBonusesArray, IBonus> BonusesArray;
typedef BaseArray<IEffectsArray, IEffect> EffectsArray;

#endif // ARRAYS_H_c08cf25c_f79d_4c96_ad49_0a9282c3fcf6
